package com.atguigu.template.improve;

/**
 * 抽象类，表示牛奶
 */
public abstract class Milk {

	/**
	 * 模板方法,制作牛奶 , 
	 * <pre>
	 * 模板方法可以做成final , 不让子类去覆盖.
	 * </pre>
	 */
	final void templateMethod() {
		
		milking(); 
		if(custWantCondim()) {
			addCondiments();
		}
		mixed();
		heat();
	}
	
	// 挤奶 
	public void milking() {
		System.out.println("第一步：挤奶");
	}
	
	//添加不同的配料， 抽象方法, 子类具体实现
	public abstract void addCondiments();
	
	//配制
	public void mixed() {
		System.out.println("第三步， 配制");
	}
	//加热
	public void heat() {
		System.out.println("第四步：加热、消毒");
	}
	
	/**
	 * 钩子方法，决定是否需要添加配料
	 * @return
	 */
	public boolean custWantCondim() {
		return true;
	}
}
